package converter;

import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;

/**
 * Produktklasse die allgemeine Datenelemente wie Titel und Veroeffentlichungsdatum bereit haelt.<br>
 * Wird von speziellen Produktklassen geerbt und um spezifische Datenelemente erweitert. 
 * 
 * @author Patrick Bauer
 */
abstract class XMLElement {
    /**
     * Liste der Produkttitel. 
     */
    protected ArrayList<String> title = new ArrayList<String>();
    
    /**
     * Die Produkt-EAN.
     */
    protected String ean = "";
    
    /*
     * Das Veroeffentlichungsdatum
     */
    protected String released = "";
    
    /**
     * Setzt die EAN.
     * @param ean die EAN
     */
    public void setEan(String ean){
        this.ean = ean;
    }
    
    /**
     * Fuegt dem Produkt einen Titel hinzu
     * @param title ein Titel
     */
    public void setTitel(String title){
        this.title.add(title);
    }  
    
    /**
     * Setzt das Veroeffentlichungsdatum
     * @param released das Datum
     */
    public void setVeroeffentlicht(String released){
        this.released = released;
    }

    /**
     * Zaehlt und liefert die Anzahl der unbekannten Datenelementen.<br>
     * Bezieht sich nur auf die allgemeinen Datenelemente.
     * 
     * @return die Anzahl der unbekannten Datenelemente
     */
    public int countUnknown() {
        int i = 0;
        
        if(this.ean.isEmpty()){
            i++;
        }
        
        if(this.released.isEmpty()){
            i++;
        }
        
        if(this.title.isEmpty()){
            i++;
        }
        
        return i;
    }

    /**
     * Mehodenplatzhalter zum Schreiben des eigenen Produktes in die uebergebene Datei.
     * 
     * @param fileWriter das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs
     */
    public void write(FileWriter fileWriter) throws IOException {}

    /**
     * Schreibt das Veroeffentlichsdatum in die uebergebene Datei.
     * 
     * @param fileWriter das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs
     */
    public void writeVeroeffentlicht(FileWriter writer) throws IOException {
        if(this.released.isEmpty()) {
            writer.write("\t\t\t\t<Veroeffentlicht unbekannt=\"1\"></Veroeffentlicht>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<Veroeffentlicht unbekannt=\"0\">" + this.released + "</Veroeffentlicht>" + System.getProperty("line.separator"));
        }
    }
    
    /**
     * Schreibt die Produkt-EAN in die uebergebene Datei.
     * 
     * @param fileWriter das Writer Objekt
     * @throws IOException wird geworfen bei Fehlern waehrend des Dateizugriffs
     */
    public void writeEan(FileWriter writer) throws IOException {
        if(this.ean.isEmpty()) {
            writer.write("\t\t\t\t<EAN unbekannt=\"1\"></EAN>" + System.getProperty("line.separator"));  
        } else {
            writer.write("\t\t\t\t<EAN unbekannt=\"0\">" + this.ean + "</EAN>" + System.getProperty("line.separator"));
        }
    }
}
